{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 5,
   "id": "34db6e3a-79af-4a8d-90b1-b32291fb8b7a",
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "data": {
      "image/png": "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xLRp07T77ruHpSnWoEEDffbZZ3qxfHmdqcxyl7scRz2IDPDHH3/orbfe0oABA0I3Z294Xl+yYE4W6tSpE35ODj74YLVt25ZkIYv55D1C0iOx/ibrXqBWeE4SjpF0VixZAJD+SAyAHPDuu++GGvnxqjcnnniienqmIOaOVat0eYaUML1B0rVRDyKDLVy4MCQL77//vkaNGhWShUXuUL0eFSpU0HbbbReShYMOOkgHHHCASmZJRatc5ZP2a/69jy0TSoU9JF0uqVOKjgegcEgMgCx32WWX6c477yyokf/kk0+GxODvnpB0RixoSFf3Srog6kFkocWLF4fksX///ho5cqSmTJkSEoj1KVeuXEgWdt11V3Xo0EHt27dX6dJedY5091Ps9zzVXcLjjpT0kKQtIzo+gH9HYgBkKZe5bN26dVguFF8mMnTo0ILfvXXx+uKTJc1TetlM0qOSukU9kBzizcx9+/YNycKIESP0448/asGCBev985tttplq164dSqZ6H4uXIm26qReTIB34RP2CpPMk/R7xWLaMLV86POJxAPgnEgMgC33//fdhU+ncud5SqNAMa9iwYRt0VdfVR06T1E/pYb/YRuNtox4IQrL53nvvqV+/fho+fLh++OEHzZ8/f71/vmzZstpmm20KkgVXRHICgdTyrqLTI5wl+LfZg4clZXbRZCC7NCQxALLLK6+8om7duoUKRHb22WfroYc8eb/h/Ev9bGzZTlSzBw4f74wFNJlXMym3kgWXTfXsgpOFSZMmad689f/UeBahVq1aatasWdiv4MZs5cuXT+mYc8l3kvaXNF3pqa6kDyVtE/VAAAQkBkAWOeuss/Too150o1BN5qWXXtLhhxd+wn5mrKJIqq80tpP0GLMEGctJqbs3v/POO2Ep2+TJk0OFpPWdLsqUKROShaZNm4ZkoXPnzmHpG4rGZUcPkPSL0lt1SR9Iqh/1QACIxADIks2j7nTrZldWuXJlff7556H0ZCJMiAXqnkVY/8KRQvDHR6yHQolly9S9ZEmdlZenJok8BtLCn3/+qY8//jhscv7000/Dcrfff/99vcmCl73VrFlTO++8s/bff/9QVcs/19gw4yS1cn8LZYYqkobGZhAARIfEAMhw48aNU8uWLQuWbzhB+Oijj5JSUtJ1al6MrQsem6D3rLd8uc4rUULH5+WJBSW5lyw4SXD5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ffPNNwl/fwCIypgxY9S4cWN13Htv6bnnsvIz/Mw0SwoSgcQAQNq7yheBlF3Kz5un8g88EB6PHj1aDRo0UOvWrTVjxoyohwYAhfbjjz9qzz33VNOmTTVu3LjwWqV77lFZL+/JIvUlXajsQ2IAIO1529pTyi6vVqig36dM0U033aQysSn2wYMHq1atWurUqZP++OOPqIcIABtszpw5ateunerUqaPPP8/fGbbZZpvp3nvv1W8TJ+rZsmXz/2DhVrCnXfD8TGxGO9uQGADImOoW2VLW86iFC9XOH8CbbKKrr75a8+fP14UXXqgSJUrI277eeustVa5cWSeeeKKWLvUuCwBITwsXLlTXrl1VrVo1DRgwIHyGlSpVSldddZXmzZunCy64IPy5LpLaL1iQ+LKlEbhUUrbuDCMxAJAx7siCJUVVli3T438r3Ve8eHHdc889IUE4/vjjVaxYMa1atUrPPvusKlSooIsuukgr3dkTANLE8uXLdeaZZ6pSpUp69dVX9eeff4bPstNPPz18lt18883h4sfani1XThWXL1emLyG6XtmLxABAxnA43TODP7g87udLlVL59Xy9dOnSIRn49ddf1bFjR+Xl5YWTr6finSDccsst4eQLAFHxZ9A111yj8uXL67HHHgsXLZwAHHHEEfr999/DayVLllzn33Wx0KfX87VMUCKLlxDFZer5FUCOcl2Jp5WZnpDUdgP+XMWKFcNyomnTpqmVa29LWrx4cVh2tMUWW+jJJ59M+lgB4O/uv//+cJHCe6OWLVsWXjvggAP0008/hVkD7yn4L50l3avMDJhfyuIlRHEkBgAyzgk+QSmz3CXp5I38OzVq1NDHH3+sCRMmhAof5k3Jp556aljP+8YbbyRlrACwthdeeCHse/J+Ae8psN13312TJk3S+++/r6222mqj3s+7Dq5TZnkytk8i25EYAMhI50l6SJnhPnf/LMLfr1+/fihp+umnn6pevXrhtdmzZ+uwww7TdtttF6oZAUCi9e/fXzVr1lS3bt00d+7cggZaX375Zag85ApEheXE4EZlTgWik5QbSAwAZKyzJfWSVEzp+wHrZU/nJ+j9XBv8u+++U9++fVW9evWCmuHuf9CkSRONHTs2QUcCkMuGDx+uHXbYQR06dCjorbLttttq4MCBoTfBzjvvXORjuDbR/yQ9qPRVUlLv2Cx1riAx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",
      "text/plain": [
       "<Figure size 960x720 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "import random\n",
    "import numpy as np\n",
    "import pandas as pd\n",
    "\n",
    "import networkx as nx\n",
    "import matplotlib.pyplot as plt\n",
    "\n",
    "class Thing:\n",
    "    def __init__(self, name=''):\n",
    "        self.name = name\n",
    "    def __repr__(self):\n",
    "        return self.name\n",
    "\n",
    "class Problem(Thing):\n",
    "    def __init__(self, name):\n",
    "        super().__init__(name)\n",
    "\n",
    "class Node(Thing):\n",
    "    def __init__(self, name, children=None, loc=None, state=-1):\n",
    "        super().__init__(name)\n",
    "        self.children = children if children is not None else {}\n",
    "        self.loc = loc\n",
    "        self.state = state\n",
    "    def add_child(self, child_name, child_weight):\n",
    "        self.children[child_name] = child_weight\n",
    "\n",
    "class Graph(Thing):\n",
    "    def __init__(self, name):\n",
    "        super().__init__(name)\n",
    "        self.node_list = []\n",
    "        self.node_map = {}\n",
    "\n",
    "    def add_node(self, node):\n",
    "        self.node_list.append(node)  # 如果我们希望node实际有一个位置属性，这里可变\n",
    "        self.node_map[node.name] = node\n",
    "\n",
    "    def draw(self, font_size=10, k_layout=0.1):\n",
    "        plt.rcdefaults()\n",
    "        plt.rcParams['figure.dpi'] = 150\n",
    "        g = nx.DiGraph()\n",
    "        # g = nx.Graph()\n",
    "        edges = []\n",
    "        edges_map = {}\n",
    "        for node in self.node_list:\n",
    "            for key, val in node.children.items():\n",
    "                edges.append((node.name, key, 1 / val))\n",
    "                edges_map[(node.name, key)] = val\n",
    "        # print(edges)\n",
    "        g.add_weighted_edges_from(edges)\n",
    "        # 有孤立点，因此需要额外处理一下边中没有涉及的点\n",
    "        g.add_nodes_from(self.node_map)\n",
    "        # {'': (x, y)}\n",
    "        pos_map = {}\n",
    "        nodes_label = {}\n",
    "        for node in self.node_list:\n",
    "            if node.loc is not None:\n",
    "                pos_map[node.name] = node.loc\n",
    "            nodes_label[node.name] = node.name + \"\\n\" + str(node.state)\n",
    "        # print(pos_map)\n",
    "        rand_seed = random.randint(1, 1000)\n",
    "        if len(pos_map) > 0:\n",
    "            locs = nx.spring_layout(g, pos=pos_map, fixed=pos_map.keys(), seed=rand_seed, k=k_layout)\n",
    "        else:\n",
    "            locs = nx.spring_layout(g, seed=rand_seed, k=k_layout)\n",
    "        # print(locs)\n",
    "        color_arr = []\n",
    "        for node_g in g.nodes:\n",
    "            color_arr.append(self.node_map[node_g].state)\n",
    "        # print(color_arr)\n",
    "        nx.draw_networkx_nodes(g, pos=locs,\n",
    "                              node_size=800,\n",
    "                              node_color=color_arr,\n",
    "                              cmap=plt.cm.cool)\n",
    "        nx.draw_networkx_labels(g, pos=locs,\n",
    "                                labels=nodes_label,\n",
    "                                font_size=font_size,\n",
    "                                font_color='black')\n",
    "        # print(nodes_label)\n",
    "        nx.draw_networkx_edges(g, pos=locs, )\n",
    "        # print(locs)\n",
    "        # nx.draw_networkx_edge_labels(g, pos=locs,\n",
    "        #                              edge_labels=edges_map,\n",
    "        #                              font_size=font_size - 1)\n",
    "        # print(edges_map)\n",
    "\n",
    "class AustraliaProblemGraph(Graph, Problem):\n",
    "    def __init__(self, name):\n",
    "        super().__init__(name)\n",
    "        australia_nodes = pd.read_csv(\"./australia_nodes.csv\")\n",
    "        australia_edges = pd.read_csv(\"./australia_edges.csv\")\n",
    "        for idx, (s, e, w) in australia_edges.iterrows():\n",
    "            self.add_edge((s, e, w))\n",
    "        for idx, (s, x, y) in australia_nodes.iterrows():\n",
    "            if not np.isnan(x) or not np.isnan(y):\n",
    "                if s not in self.node_map:\n",
    "                    node_s = Node(s)\n",
    "                    self.add_node(node_s)\n",
    "                self.node_map[s].loc = (x, y)\n",
    "\n",
    "    def add_edge(self, edge):\n",
    "        if edge[0] in self.node_map:\n",
    "            node_0 = self.node_map[edge[0]]\n",
    "        else:\n",
    "            node_0 = Node(edge[0])\n",
    "            self.add_node(node_0)\n",
    "        if edge[1] in self.node_map:\n",
    "            node_1 = self.node_map[edge[1]]\n",
    "        else:\n",
    "            node_1 = Node(edge[1])\n",
    "            self.add_node(node_1)\n",
    "        node_0.add_child(node_1.name, edge[2])\n",
    "        node_1.add_child(node_0.name, edge[2])\n",
    "\n",
    "problem = AustraliaProblemGraph('Color')\n",
    "problem.draw(font_size=7, k_layout=0.3)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "id": "22bd01f6-b599-4edc-a8df-09d484c61698",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "找到符合3色要求的解\n",
      "{'T': 0, 'V': 0, 'NSW': 1, 'Q': 0, 'SA': 1, 'NT': 2, 'WA': 0}\n"
     ]
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAwYAAAJICAYAAADb4/N8AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuNCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8ekN5oAAAACXBIWXMAABcSAAAXEgFnn9JSAACAP0lEQVR4nO3dBZhV1dfH8d9Id3cIEtItIC1IKyFlAIKY2F1/67WxG0XFwCQsQCmDbhHp7lY6h3iftefeERQUZu69595zvx+feW4MzNmDM+esdfbeayUcO3bsmAAAAADEtbO8HgAAAAAA75EYAAAAACAxAAAAAEBiAAAAAIDEAAAAAIAhMQAAAABAYgAAAACAxAAAAAAAiQEAAAAAQ2IAAAAAgMQAAAAAAIkBAAAAABIDAAAAACZtSv8ZChYsqL1796p48eL8SwIAAAAeW7NmjbJkyaJNmzZFdsbAkoLExMSU/nUAAAAAIWSxucXoEZ8xCM4UzJ8/P8UHBwAAABAaFStWTNXfZ48BAAAAABIDAAAAACQGAAAAAEgMAAAAABgSAwAAAAAkBgAAAABIDAAAAACQGAAAAAAwJAYAAAAAUt75GICP/ClptqRZktZK2i/pgKRjkjJJyiipiKSagY+8Xg8YAACEGokBEI+WSxoqaWbgY+UZ/v2zAwlCLUmXSDo3TOMEAAARQ2IAxIsjkkZKelPSD6n8WqsDH8MkPSCpmaS+ktpxVgEAIFZxCQf8bpukAZL6S1oTpmOMC3zYcqNrAx8Fw3QsAAAQFmw+BvzK9gd8LKlM4K5+uJKC462X9IikspLeDYwBAADEBBIDwI82SmovqaekHR4cf7ekayS1DmxmBgAAUY/EAPATu0M/SFJFSd95PRhJoyRVkvQeswcAAEQ7EgPALxIl9ZLUQ9J2RY9dkq6W1FXSQa8HAwAAToXEAPAD6znQSdJHil5DJF0saa/XAwEAACdDYgD4ISm4OEqWDv2XMZJakRwAABCNSAyAWHZY0mWSxip2TAzMbhzyeiAAAOB4JAZALLtR0teKPbYpuTcbkgEAiCYkBkCssqVD7yh2fSrpC68HAQAAgkgMgFhkVYeuU+y7SdJmrwcBAAAMiQEQi24LNDGLdX9IuoElRQAARAMSAyAWlxCFoCxpL/VSghJ0n+77x+fs/Xf1rnv8t/9KqETqB/IVS4oAAIgGab0eAIAzLE16fWi/5Ft6S/frfuVQjhPeP6IjmqIpya9naIZu0S0apmEqpELuvQzKELolRW0lZQvNlwMAAGeOxACIJV9K2hC6L1dFVbRGa1xy8PeZgzRKo7qqm/x6j/a4x+qqHpqZgr8vKRoUWFYEAAA8wVIiIJa8Gdovl03Z1Fd99Ype0UEdlKfeYK8BAABeIjEAYsUsSdNC/2Vv1a3aqZ0aqIHy1HxJE7wdAgAA8YzEAIgVb4Xny+ZXfvVWbz2v592+Aj/NiAAAgNNHYgDEgh2BhmBhcpfu0iqt0mANlqeGStrk7RAAAIhXJAZALBgnaX/4vnxJlVQ3ddOzelaeOixplLdDAAAgXpEYALGyvyDMrCrRHM3RD/pBfv9eAQDAP5EYALEgAsFyZVVWG7XRM3pGniIxAADAEyQGQLQ7Frlg2WYNftEv8tQc110NAABEGIkBEO3WBBqARUBDNVR91Zen9kla5O0QAACIR3Q+BqJdmGYLPtAHJ31/oiae9P0LdaGORaoD2WxJFSNzKAAAkIQZAyDabVH82ez1AAAAiD8kBkC0O6D4E4/fMwAAHiMxAKJdPAbJYezZAAAATo7EAIh28fhbmsbrAQAAEH/iMeQAYkvGyB3qS32ptmqrQiqkHMqhRmp0ys3I4XQsQ4Q2OQMAgGQkBkC0yxS5Q72sl5VXefWG3tBgDVYRFVEzNdNv+i1yg5CUkDkhoscDAACUKwWi3zmRO9R3+k55lOeEEqXWEdkShXf0TuQGUipyhwIAAEmYMQCiXY3IHer4pMCcpbNUSZW0Uisjcvxgn4Rv13+rffus0xkAAIgUEgMg2uXy7g76ER3RDM1QaZWOyPESlKBN2qT2fdsrS5Ys7qNChQrq2bOnBg0apF27dkVkHAAAxCOWEgGxoKak5ZE/7Ot6XWu0Rn3VN2LH/C3tb9LhpOc2a7Bw4UL38fHHH7v3MmXKpOLFi6tGjRpq2bKl2rdvr5w5c0ZsfAAA+FXCsWPHUlT+o2LFiu5x/vz5oR4TgL/rJ+neyB5ymqapiZroXt2rR/Vo5A78kHT00aP6+eef9d1332nKlClaunSptm/frlOdrjJmzKhixYqpWrVqatGihS655BLlzp07cmMGACAKpDY+JzEAYsHPki6I3OFWaZXqqq4rV/qFvnBLfCLmW0kX//Pto0ePavLkyfrmm280adIkLVmyRH/++ecpk4UMGTKoaNGiLllo3ry5OnbsqPz584d//AAAeITEAIgHhwPVidaG/1A7tEP1VV/ZlE0/6SdlimC91P1Z9yvTtkxShtP785YsTJs2Td9++60mTpyoxYsXa9u2bf+aLBQpUkRVqlRRs2bN3MxC4cKFQ/tNAADgERIDIF48Kel/4T3EIR1SK7VyVYimaqoKqEB4D/j34995SOmfT5+qr2HJwuzZs/XVV1+5ZGHRokUuWbD3TyZ9+vQqVKiQqlatqgsuuMAlC7aHAQCAWENiAMSLTZIsXk0M3yGu1tUaqIEaoAGqoArJ72dQBlVXdYWVrVZaIalEeL78nDlz9PXXX2v8+PFuM/PWrVt15MiRk/7ZdOnSqWDBgqpcubKaNm2qTp06qUSJMA0MAIAQITEA4sllkj4P35cvoRJardX/eP9sne32HYTVxYH9BRE0b948DRs2zCULCxYs0JYtW06ZLKRNm9YlC5UqVVLjxo1dslCmTJnIDhgAgH9BYgDEkwmSGiU1AovohuBI+F5SK68HITebYDMLVhXJzm+bN2/W4cOB+ql/kyZNGhUoUMCdDy1ZsGVI5cuXj/iYAQAwJAZAPDkmHWlyRGnGp5GvnCdpavS2XFy+fLmGDh3qkgWbZdi4ceO/JgtW/cgShEaNGrmZBZtlAAAg3EgMgHizQjpU7pDSJ6Zuk27UsG/jV+m4LQ0xYfXq1S5Z+PHHH/X777+7ZCEx8eQbQM466yzly5fPJQsNGzZUhw4dXIM2AABCicQAiENHXz2qs249yx9Lip6WdJ98Yd26dS5Z+Omnn/Tbb79pw4YNOnTo0CmThTx58qhcuXJq0KCBSxZq1arl3gcAICVIDIB4dFTaVmWb8s7Pq5hfQjTZdvbKtzZt2uQ2OI8dO9YlC+vXr9fBgwdP+mcTEhJcslC2bFnVr19f7du31/nnn0+yAAA4LSQGQBz6v//7P334yIeaq7nKoiyKSTG6hCgUrPqR9VmwZMHKqNpMw4EDB06ZLOTKlcslC/Xq1dPFF1/s9i6QLOBUbPfLAkmzJM0MPK6XZD9h+wOVgTNKrnVhMUk1j/so5+88HfC9iiQGQPywDa+tWrXSuHHj3OsrM1ypgQcHxuZyovckXeX1IKLHn3/+6ZKFMWPG6Ndff9XatWu1f7+FcSdPFnLmzKnSpUu7GYV27dq5qkhWUhXx6Q9JAyUNtZ4dgSQgJTJLrmNJFzu/SMoZ4nECCC8SAyBOrFmzRnXq1HFLU0yFChU0ZcoUZf80u3SDYsvzku70ehDRb8eOHfrmm280evRo183ZNjyfKlkwliyUKlXK/ZxcdNFFat68OcmCj9nFe4akNwPtTU6+QC3lLEm4XFLfQLIAIPqRGABxYPjw4a5GfrDqTa9evTRwoN0fTHKk3xGluTdGSpg+JulhrwcRu/bs2eOShVGjRmnWrFkuWdi7d+8p/3yOHDl0zjnnuGShbdu2atGihdKn90lFqzhlF+3BkvoFlglFQl1J90rqEKHjAUgZEgPA5+655x4999xzyTXy3333XZcY/MM7kq4PRA3R6iVJt3k9CP/Zt2+fSx6///57zZw5U6tWrXIJxKlky5bNJQvnnXee2rRpo9atWytjRlt1jmi3MfBrHuEm4cm6SnpdUj6Pjg/g35EYAD5lZS6bNGnilgsFl4lMnDgx+XfvpGyBcR9JOxVdskp6S1J3rwcSP2wz84gRI1yyMGPGDK1cuVK7d+8+5Z/PmjWrSpYs6Uqm2j4WW4qUObMtJkE0sAv1J5JukbTd47HkCyxf6uzxOAD8E4kB4ENLly51m0r/+MO2FMo1w5o0adLp3dW18iPXShqp6NA0sNG4hNcDgSWbP/zwg0aOHKlp06ZpxYoV2rVr1yn/fJYsWXT22WcnJwtWEckSCESW7Sq6zsNZgn+bPXhDUowXTQZ8pSKJAeAvX3zxhbp37+4qEJkbb7xRr79uk/dnwH6rPwws2/Fq9sDix+cCEU0MFk2Kp2TByqba7IIlC8uWLdPOnaf+obFZhOLFi6tmzZpuv4I1ZsuePXtExxxPlki6UNJaRafSksZKOtvrgQBwSAwAH+nbt6/eesvW3MhVk/nss8/UuXMqJuzXB0qKRPpWY0tJ/ZkliFWWlFr35u+++84tZVu+fLmrkHSqy0WmTJlcslC9enWXLHTs2NEtfUPqWNnRFpK2KroVkTRGUnmvBwJAJAaATzaPWqdba3Zl8ubNq6lTp7rSkyGxIBCo2yzCqVeOnLFjOpbcQ+FguoNKf1V6JfRNkKqE7hiIDkePHtXPP//sNjlPnjzZLXfbvn37KZMFW/ZWrFgxVatWTRdeeKGrqmU/1zg98yQ1tv4Wig0FJE0MzCAA8A6JARDj5s2bpwYNGiQv37AE4ccffwxPSUkrVPNpYGHw3NB8yUNlDindLemU0DNBYkVJ3CULliRY+VR7XLx4sWvUdqrLSoYMGVSkSJHkZMFmFgoWLBjxcUe7FZIaBCoQxZKzA8lBUa8HAsSxiiQGQOyy0qPXXXedC7DMfffdp6effjr8B7bf+qWSZgYKodvHbEmnLlrjJGZI1OHKhzV01VD9sO0H7Sy1U98t/Y49BEhmP8vTp093yYJV0bJkwTbRB3/G/84SYEsWqlSpombNmqlTp04qXLiw4tX+QDOxxYpN1SRNs/+vXg8EiFMVSQyA2GQbjD/55JPk4Oirr75yNeU9Y3HbMmuxbLUuAx92dshk60ICC4nLWjMF6YEHHnAJjI374MFQ91uF31hSYJ2bv/76a5csLFy4UNu2bfvXZKFQoUKqXLmySxZsGZLtYYgH1hD8RcW2RyU94vUggDhVkcQAiC1WHrJ27druTqqxu6NWZz6W7pJaTXxrkGV+/fVXtzQEOFO2p8aShfHjx7tkYevWrTpy5MhJ/2y6dOncsiNLFqy/h23Kt74LfjJJUsMo71F4OtJKmhGYPQAQWSQGQAyxJRZNmzbV3r173Wur4GINqM466yzFGitbuX//ft1000167bXXvB4OfMKuKcOGDXPJgj3fsmXLKZMFq9xVoEABVapUySULtgypTJkyitUlRFUDK/z8wL6X6SwpAiKOxACIEa+88opuv/12tzEzISFBjz/+uB588EHFKmt6NWvWLJUrV87d7QXCxWbXLFn45Zdf3Gb9zZs3J/f5+Ls0adK4ZKFChQpq3LixSxbKl4/+QpphX0Jky7beeUd6+237B7WyUVKjRtKjj0phmvFjSREQeSQGQJSzddQWnNiSiWAZR+s+a0FLLHvooYf0xBNPuCUe1iQLiCTr2jx06FDXb8GShU2bNikxMfGUyUK+fPlcstCoUSNXDck2O0eL5ZLKhHsJUa9e0mefSbffblOVtqZRevNNacIEacQIqam1KA+tdJJWSyoU8q8M4FRIDIAoZhss7c766tV2eZRKlCjh9hP4oZ67fU/2/Rj7nuz7BLz+mQwmC7///rs2bNhwymTBlu9ZsmAzXg0bNnTJgu2V8WJZ392Sng/nAQYPlrp2lT7+2KoenDiL0KqVXcilZcusU13ID/1/dhMh5F8VwKmQGABRyppBtW7dWgcOWHkfucBjyJAhMbmf4FSyZMnimrPdcMMNetPuPgJRZt26da7i17hx4zR37lytX7/+lDNc9ruZJ08elyxYP5EOHTrovPPOC+vv7P5A3f+wNjKz2cktW6QFC6SEv9UWnjJFqlfvn0lDiFgxs1WBDckAwo/EAIhCtsTm4YcfTt5P8NJLL+nWW2+V31jQNHPmTJUtWza5yhIQ7WzZkSULY8eOdZWRLFk4Vdld+/21ZMF+xi1ZaN++vc4///yQJQvWjLyXwshmTLJmlW6+WXr+FPMSNoN5ySVJexDCYJjdGAnLVwYQ6vicJB4I8X6CVq1aacyYMcl31G1ZgwXQfnTRRRe5xMDWewOxwsqe2iyXfRy/7M82ONvv7m+//aa1a9e62T5L7u1z9mHdnZ977jmXLOTKlcslC5YktGvXzu1dSEmy8LR1PM+RQ2Hzxx+SzZD8Wx+IYsWk9evDNgSbSyQxAGIDMwZACJcsWH+CjRs3ute2HGHatGnKnj27/Pw9F7Ogwq1ImKK6det6PSQgZP7880/XwXn06NGuQZslC1ai92QsWciZM6dKly6dnCxYgQErqXoqcwJdjmWX4b8v8QmVTZukQoWsLJp0yy0n/zPVq0tFikjDh4dnDIEyrKXD9tUBhCo+989iZ8BDI0eOVKlSpZKTgh49ergSnn5OCkzRokXdrIh5//33vR4OEFK5c+dW79699dlnn7mlcrafZufOnfrwww91xRVXuOTf+nkYu8e2fft2txH/1Vdf1YUXXugqdtnMgm3Mv/HGG13PkuPLrP4SfBKupMDkyWOtpKU11tL8FNauTUoewmhCWL86gFAhMQBS6f7771fbtm3dhkZbSvDuu+/qo48+Uryw5lLBzdaA31my37NnTw0aNMgl/9ascPfu3fr000/d+1YSNZgsmx07drh+H7Y5v02bNi5ZyJEjh2rUqKE3bONvuKVLJ51/vvT990kzE383bVrSciPbgBxGM8P61QGECnsMgBSyROCCCy5w646NXewnTpyYHCjHC9tnYEumVq5c6fVQAE9kzZpVl112mfsIstmF4cOHu54ltg/Hfj/27NnjPrdr1y79+uuvlmVEZoA33phUrtT6GFx++YnlSh95JGmPg20+DqNZYf3qAEKFPQZACixfvtytp7cNiaZ69eouKQguK4i3Ci+FAssQJkyYoAYNGng9JCAq2WZmW05kSw+n/v675k2aZN3XInPwYIOzO++Umjf/q8GZFUqw97t1C+vhM0razd1IIOwoVwpE2JdffunWFwfXClPDX8qWLZu7G9qnTx+3lArAv5skKaIptM0OWDnSt9+WFi2yLEWyjdHW9dg6IUfAb5Kip9804E8V2XwMRI5tIOzWrZtLCqzayOeffx73SYGpXLmye7TSrAD+29xIH9BKqV5/vWRLmKyy0vTpSbMVEyb493sGcMaY1QNOg60XtiUybl2wK/SRx62rt0pEkCvNaOVKV69e7Xo5+Km7MxAOO8NZovR0WG8Vu6nRp49UoYJ03P6IcLGlRACiG1dv4D/YdFzhwoWTk4J69eppw4YNJAXHueqqq9zjkSNHNH78eK+HA0S9A14mBUH2e2sJSgSSAnPyDhAAogmJAfAvBg4cqKpVq7ra5eaee+7RpEmTlN7qgiNZ/vz53T4D88EHH3g9HCDqHVT8icfvGYg1JAbAKVx55ZXuTrjdBbdE4LvvvtOzzz7r9bCiliVQ5pdfkts2ATiFeLy1EI/fMxBrSAyAv7Ea4+XLl09uUlawYEFXntTq9ePUOnTo4B7XrFnj9hkAOLVMkT7gnDlSw4ZSpkxSyZLS66/7/3sGcMZIDIDjWCOiIkWKaJGV85N04YUXau3atSpatKjXQ4t6vXv3do+WFIwbN87r4QBRLWnhXYRs3ZrUu8Aaqg0fLvXtK912m/Txx5EchbJG9GgAUoLEAAh47bXXVLt2bVePPyEhQY899pjGjBnjypLiv+XOndt1fzYffvih18MBolpE+6P3759UAWnwYKlZM+nuu6Vrr5Uef9y/3zOAFCExQNyzO9ydOnXSLbfcIuv3lzFjRo0dO1YPP/yw10OLOdWqVXOP1gUawKlVj+TBRo2S2rSRju/M3qWLtHSptGJFxPYXkBgA0Y/EAHFt27ZtKl26tIYNG+Zen3322a4Wf9OmTb0eWkzvM7DlV+wzAE4tu6SykTrYkiVSuXInvhd8vXhxRIZgLRDZfAxEPxIDxC2rt1+8eHGtXLkyOahdsWKFK72JlOnVq5d7tKRglN2lBHBKNSN1oO3bpZw5T3wvV66/Puen7xVAqpAYIC49/fTTatKkifbv3+/2E7z00kv66quv6NibSjlz5nQf5uMIb2wEYk08Bcu1vB4AgNPCrkrEFbuT3bp1a40ePdq9zpIli6ugU6dOHa+H5hvVq1fXTz/9xD4D4D80jNSBbHYg0KQx2Y4df30uAhpE5CgAUovbo4gbGzZsULFixZKTgrJly2rdunUkBSF2ySWXuEf7t2WfAXBq50mqEokDlS0rBUowJwu+PvfcsB++vqTyYT8KgFAgMUBc+P7771WyZEmXHJgrrrhCixcvTl72gtDp2bOne7QKT8OtZjqAk0qQ1DcSB2rZUho5Utq//6/3hgyRypSRzjkn7IePyPcIICRIDOB7DzzwgNq0aaNDhw65PQQDBgzQoEGDvB6Wb2XPnl25AssT+HcG/t0VkWh2dv31to5S6tpVsuaDzz8vvf229NBD4T6y8knqFPajAAgVEgP4liUCDRs2dBuNgwHrnDlzdPXVV3s9NN+rWTNpW+XkyZO9HgoQ1awb8JXhPki+fNKYMUkViNq2tW6O0osvSj16hPvIsrNthrAfBUCosPkYvmQlSG3vwNatW93rqlWruiA18/ENfhDWfQbWJM6Wbh0+fJju0cC/uEHS6+E+iDUfjHBBALvzeG1EjwggtZgxgO8MHTrUbSwOJgXXXXedmykgKYicHoE7kbbP4JtvvvF6OEBUqyDpGvnPbZJKeD0IAGeExAC+csstt6hz587Jd6k//fRT9e/f3+thxZ2sWbMqT5487vlnn33m9XCAqPe8pGLyD+vq/ITXgwBwxkgM4AsHDhxQrVq19JqtnZVcULpgwQJddtllXg8tbrHPADh92SW9K/9UWxooKZPXAwFwxkgMEPMWLlyoQoUKadasWe513bp13dr2MlaKD57p0qWLe9y0aZObwQHw71r4ZEnR7ZLqeT0IAClCYoCY9uGHH6py5craEejiedddd2nKlClKnz6910OLe5dffnnyPoNhw4Z5PRwgZpYU5T++30CMKbZvH0uIgBhGYoCY1bt3b/Xq1UtHjhxRunTp3CbX5557zuthIcA2e+fNm9c9Z58BcPpLisZlyqRsiYmKNbkPHdK4zJlZQgTEMBIDxJzdu3erYsWK+uCDD9zrggULatmyZWrXrp3XQ8PfnHfeee5x6tSpXg8FiBmVJI1Jl05pDxxQrEi/b59+TJ9eLOAEYhuJAWLK7NmzVbhwYbex2DRt2lRr165V8eLFvR4aTqJbt27ucfPmza7hHIDTM+r//k+HmzeXdu5U1PvjDx1q3Fg/v/KK1yMBkEokBogZb775prsDvWfPHiUkJOjRRx/VuHHjaJ4VA4mB7TMYPHiw18MBYsIrr7yiRx55xDUkK3DZZcoV3Lx/7JiiRmAs+RMTlbtjR2nmTN12220aONDqEQGIVSQGiHpHjx51FW5uvPFG9zxjxowaM2ZM0oUTUc3+X+XPn989//zzz70eDhD1bImkBdjGfndWDBmiGWnTqpYtK0qwQqBRIiFBDQ4e1Ix06bT822+VK1cu93afPn1ck0kAsYnEAFHtzz//dGVHhwwZ4l4XK1ZMq1evVrNmzbweGk5T7dq13eP06dO9HgoQ1Sygvuqqq9zznDlzulLMtom/lKRpGTPq2YMHleHoUa+HqcxHjujVQ4c0PkMGFQ+M1ZZ3WmNDmx3s2rWru3kDIPaQGCBqTZw4UUWLFtWKFSvc64svvlirVq1KvgON2FpOtGXLFteIDsA/jR492gXUFlhbgG1JQe7cuU+4WN+TIYN+P+ssNfBwnHZLZn6aNLo5fXrXyCzIikDMnTvXzRLazG7r1q1d6WgAsYXEAFGpX79+atSokfbv3+/2Ezz//PP69ttvddZZ/MjGGgt27P+h+eKLL7weDhB1LIBu06ZN8lJJC7At0D4Zq/rzi6Q3JJWM4BjLBDoz2zxAiVP8mZIlS2rmzJmuj4yVkW7cuLH7XgDEDqIsRBW7MNoF8t5773V3zmwafdKkSbrzzju9HhpSyIKEAgUKuOdffvml18MBoooFzhZAWyBtvysWWFuA/V8X7r6SlkkaKekiW/IfhrHZcToGkoFFtn/gNI5jpaQnTJigNGnSKDExUXXq1NHy5cvDMDoA4UBigKixYcMGV3b0+++/d69tb8H69et1/vnnez00pJIFB2bGjBleDwWIGhYw2++GBdAWSI8fP94F1mdyAW8t6Tv7WpLulVQ6BOM6V9JDklZJsp7lF55hsGD7imxplM3w2vLBqlWruvM7gOhHYoCoMGrUKJ1zzjkuETCXXnqpFi1a5Da1IfZddtll7nHr1q1ueRgQ7yxQtoDZAmcLoO0cGEygU8LmGJ6RtFTSdkk/2pJM2+MTSBYy/e1uf0LgPUsCLpf0gqSfJe0MzA78nxV7SMX3Zz1mhg0b5pYR7t27VxUqVHDFJABENxIDeO6hhx5Sq1atdPDgQXeBfPvtt/XZZ5+xn8BHOnXqlLzP4NNPP/V6OICn/vjjDxcoW8BsvxcWQIey0prdTrlA0t1WJjiQLOyTdESSbf8/GHi+L5AEfCLpDkmNJWUP2Sik9u3b66OPPnLPd+7cqXLlyrk+NACiF5EXPHP48GG3tvaJJ55wr7Nnz+46G1977bVeDw0hZk3ogpspaXSGeGaBcfny5V2gHOxbYAF0JFhqnsH2/YRpT8LJdO/eXa+99lryjKElB1QnA6IXiQE8Yb0IChcu7NbUmsqVK7tlRDa1Dn8K7hWxzZVAPLKA2AJjC5CNBcw9e/aU391000166qmn3HM7z9v53m4MAYg+JAaIuK+++kqlS5dOvjhec801rjKH1e6G//cZ2DKKfftsEQMQPywQDt4AMTZTagFzvLj//vt1zz33uOfLli1TzZo1XRU6ANGFxAARdfvtt+uSSy5xF0mrwjFo0CC98847Xg8LEdChQ4fkfQYff/yx18MBIsYCYAuELSA2FiA/+OCDijfPPvusrrvuOvfcbgY1bNjQ6yEB+BsSA0RsCv28887Tyy+/7F5bR8/58+friiuu8HpoiOA+A1s+ZoYOHer1cICIsQA42OjLAmMLkONV//79XdU5M3nyZNchGUD0IDFA2C1cuNAFhMG15VaSz0r1nXuuFcpDPO4zmDVrltdDASLCAl8LgI0FxBYYxzurOmeNLM0PP/ygbt2sqCqAaEBigLCypUK2rnb7dqusLd1xxx2aOnWqMmSw2hiIN1ahxFg98127dnk9HCCsLOC1wDeYIFhAjCQjRoxQgwYNkjuiU40OiA4kBgibq6++Wj169NCRI0eULl06ff3113rhBWujg3h18cUXJ+8zsKQR8CsLdC3gNfXr19fIkSO9HlLU+eWXX5Ir0Q0YMEB3322dFwB4icQAYanTbbME7733nntdoEABLV26NGK1uhG9rGldkSJF3HP2GcCvLMC1QNdY4Bssy4x/ng9siWmZMmXc6+effz65rw0Ab5AYIKSsQZntJ5g3b5573aRJE61bt05nn32210NDlAguH7CfFcBvLLC1ANdYwGuBL13c/70ogV0vihUr5l4/9NBDyQ3RAEQeZyuEzFtvveUqD+3evdu9fvjhh/XTTz+5Ez8QZMvLzI4dO9wH4BcW0Fpga4oWLeoCXs5//y19+vRasGCB8ufP717fcsst+vDDD70eFhCXSAwQkhrdVm2jb9++7rltLB49erQee+wxr4eGKNSqVavkO6hc/OEX9rNsAa2xANeqsVnAi9NjDS7t3yxnzpzude/evV0zTACRRWKAVLHqMlZ29IsvvnCvbTp41apVat68uddDQ5SypMDuphou/PAD+zm2QNZYYGsBLp3cz1ywv02WLFl07Ngxde7cWWPHjvV6WEBcITFAik2aNMklAsFunm3btnVJQcGCBb0eGqJcsOPpnDlzvB4KkCoWuFoAa4GsBbQW2FqAi5SxPWq//fabMmbM6GagbYZx2rRpXg8LiBskBkiR5557zgV3+/btc+Un+/Xrp+HDh7PJDme0z2Dnzp1u1gmIRRawWuBqAawFshbQBrt7I+VKlSqlGTNmuDLXVu7arjXBghYAwosoDmfELoA2M3DPPfe4O2SZM2fWhAkTqD+NM2JLzYJJ5MCBA70eDnDGLFC1gDXYp8UCWQtoERqVKlVy15Y0adIoMTHRFbZYvny518MCfI/EAKdt06ZNKlGiRHKjntKlS2vt2rWueQ9wJiwpKF68uHv+zTffeD0c4IxYgGqBqgWsFrhanwILZBFaderU0ahRo9z54sCBA64nxIYNG7weFuBrJAY4LWPGjHFJgSUCplu3blq8eDFraZFijRo1co+2/AKIFRaYWoBqgaoFrBa41q1b1+th+VazZs00ZMgQt2R17969qlixIssPgTAiMcB/sn4ELVq00MGDB92F0PoVfP755+wnQKpceeWV7nHXrl3atm2b18MB/pMFpBaYWoBqgaoFrBa4Irw6duyYvOTQep+UL19ee/bs8XpYgC8R2eGUDh8+rAsuuECPP/64e50tWzbXxfP666/3emjwAeuKbcswzPvvv+/1cIB/ZYGoBaTBpnwWqFrAisjdSHj11Vfd8y1btqhChQo6dOiQ18MCfIfEACe1Zs0aV2v+559/dq9t/axNoVevXt3rocEnbMbp7LPPds/ZZ4BoZgGoBaIWkBoLUIMzXoicm2++WU888YR7bsta7bpkN7AAhA6JAf7BgjTbWLx582b3uk+fPvr9999p2IOQa9y4sXu0ny8gGlngaQFocH+VzaBagApvPPjgg7rrrrvc86VLl6pWrVquWh6A0CAxwAnuuOMOdejQIbnaxkcffaR3333X62HBp3r16uUed+/e7apeAdHEAk4LPC0ANRaQ/u9///N6WHHP+uhcc801ycULgjcYAKQeiQEcq7BhpeFeeukl9zpXrlzuLm6wERUQrspEwX0G7733ntfDAU5gAWewapYFohaQIjq88847rjqemThxotq0aeP1kABfIDGAKztapEgRTZ8+3b22+ty2n8A22gHhVrJkSfdonbOBaGGBpgWcpmvXri4QRXSx6njWedp8//33uuyyy7weEhDzSAzi3CeffHJCXehbb73VJQgZM2b0emiIo+pEhn0GiBaXXnqpCzSNBZ5ffPGF10PCKdj/p3r16iUnClTNA1KHxCCOXXvtterevbuOHDmidOnSadiwYXr55Ze9HhbizFVXXeUerTY8XU3hNQssg4mABZzBBAHRa8KECapSpYp7/vbbb+vee+/1ekhAzCIxiNN63HYSHTBggHudP39+t7mOmtzwwvnnn6+0adO652x0h5csoLTA0tg50gJOxEbp41mzZrlqeqZfv3568sknvR4WEJNIDOLM3Llz3X6C4LIN21y3fv365HrygBfYZwCvWSBpAaWxANMCTbq7xw67uTBv3jzXf8dY9ag33njD62EBMYezXhyxzXPWoGzXrl3u9UMPPeQamAXv1gJeadasmXucP3++10NBHHr99deTy5AGb5xwXow9GTJk0MKFC5UvXz73+qabbtLHH3/s9bCAmEJiECe1uK1aw3XXXeee28lz1KhR+r//+z+vhwacsM9g3759rus2ECnWqyXYsMwCykWLFlF8IYZZI077f5gjRw732jpU01kdOH0kBj63Y8cOlStXzlVrCN4NW7VqlVq0aOH10IBkViLXNsAb9hkgUixgDDbZs0DSAko6vMe+3Llza8GCBcqSJYuOHTumSy65ROPGjfN6WEBMIDHwsSlTprhEINi10+py293YggULej004B9KlSrlHkeOHOn1UBAHLFC0gNECRwsgbRmbBZTwh8KFC7vmdDb7YzPlLVu21IwZM7weFhD1SAx86sUXX1T9+vXd0oyEhAQ988wzGjFiBJvpELUuvPBC92h3+oBwmjZtmgsUg0srLYC0myjw380G+39ts5FWlrtBgwbsYwL+A1Giz9iFrl27drrzzjvdnbBMmTJp/Pjx1HVG1OvTp4973L9/v1auXOn1cOBTFhg2bNgwuX+LNXQMzlbBf6zs7C+//KI0adLo0KFDqlWrFucX4F9QduE0/SFplpX7lGQ1ffZLOigpvaRMtuFJUkVJNSUV8miMW7ZscWu1g5s3zznnHDd1yvQ4YkG1atWUPn16d/G2fQbUIUeoWUBogWFiYqILFC1g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",
      "text/plain": [
       "<Figure size 960x720 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "import random\n",
    "import numpy as np\n",
    "import pandas as pd\n",
    "\n",
    "import networkx as nx\n",
    "import matplotlib.pyplot as plt\n",
    "\n",
    "class Thing:\n",
    "    def __init__(self, name=''):\n",
    "        self.name = name\n",
    "    def __repr__(self):\n",
    "        return self.name\n",
    "\n",
    "class Problem(Thing):\n",
    "    def __init__(self, name):\n",
    "        super().__init__(name)\n",
    "\n",
    "class Node(Thing):\n",
    "    def __init__(self, name, children=None, loc=None, state=-1):\n",
    "        super().__init__(name)\n",
    "        self.children = children if children is not None else {}\n",
    "        self.loc = loc\n",
    "        self.state = state\n",
    "    def add_child(self, child_name, child_weight):\n",
    "        self.children[child_name] = child_weight\n",
    "\n",
    "class Graph(Thing):\n",
    "    def __init__(self, name):\n",
    "        super().__init__(name)\n",
    "        self.node_list = []\n",
    "        self.node_map = {}\n",
    "\n",
    "    def add_node(self, node):\n",
    "        self.node_list.append(node)  # 如果我们希望node实际有一个位置属性，这里可变\n",
    "        self.node_map[node.name] = node\n",
    "\n",
    "    def draw(self, font_size=10, k_layout=0.1):\n",
    "        plt.rcdefaults()\n",
    "        plt.rcParams['figure.dpi'] = 150\n",
    "        g = nx.DiGraph()\n",
    "        # g = nx.Graph()\n",
    "        edges = []\n",
    "        edges_map = {}\n",
    "        for node in self.node_list:\n",
    "            for key, val in node.children.items():\n",
    "                edges.append((node.name, key, 1 / val))\n",
    "                edges_map[(node.name, key)] = val\n",
    "        # print(edges)\n",
    "        g.add_weighted_edges_from(edges)\n",
    "        # 有孤立点，因此需要额外处理一下边中没有涉及的点\n",
    "        g.add_nodes_from(self.node_map)\n",
    "        # {'': (x, y)}\n",
    "        pos_map = {}\n",
    "        nodes_label = {}\n",
    "        for node in self.node_list:\n",
    "            if node.loc is not None:\n",
    "                pos_map[node.name] = node.loc\n",
    "            nodes_label[node.name] = node.name + \"\\n\" + str(node.state)\n",
    "        # print(pos_map)\n",
    "        rand_seed = random.randint(1, 1000)\n",
    "        if len(pos_map) > 0:\n",
    "            locs = nx.spring_layout(g, pos=pos_map, fixed=pos_map.keys(), seed=rand_seed, k=k_layout)\n",
    "        else:\n",
    "            locs = nx.spring_layout(g, seed=rand_seed, k=k_layout)\n",
    "        # print(locs)\n",
    "        color_arr = []\n",
    "        for node_g in g.nodes:\n",
    "            color_arr.append(self.node_map[node_g].state)\n",
    "        # print(color_arr)\n",
    "        nx.draw_networkx_nodes(g, pos=locs,\n",
    "                              node_size=800,\n",
    "                              node_color=color_arr,\n",
    "                              cmap=plt.cm.cool)\n",
    "        nx.draw_networkx_labels(g, pos=locs,\n",
    "                                labels=nodes_label,\n",
    "                                font_size=font_size,\n",
    "                                font_color='black')\n",
    "        # print(nodes_label)\n",
    "        nx.draw_networkx_edges(g, pos=locs, )\n",
    "        # print(locs)\n",
    "        # nx.draw_networkx_edge_labels(g, pos=locs,\n",
    "        #                              edge_labels=edges_map,\n",
    "        #                              font_size=font_size - 1)\n",
    "        # print(edges_map)\n",
    "\n",
    "\n",
    "# 基本回溯\n",
    "class BacktrackingAustralia(AustraliaProblemGraph):\n",
    "    def __init__(self, name):\n",
    "        super().__init__(name)\n",
    "    \n",
    "    # 颜色以1234来定，绘图时让图案自动区分\n",
    "    def basic_backtracking_search(self, color_num=4):\n",
    "        color_map = {}\n",
    "        if self.recursive_backtracking_search(color_map=color_map,\n",
    "                                             color_arr=[c for c in range(color_num)],\n",
    "                                             uncolored_nodes=[node for node in self.node_list]):\n",
    "            print(\"找到符合{}色要求的解\".format(color_num))\n",
    "            print(color_map)\n",
    "            # 将节点的state赋值为color\n",
    "            for node_name, node_color in color_map.items():\n",
    "                self.node_map[node_name].state = node_color\n",
    "            self.draw(font_size=7, k_layout=0.3)\n",
    "        else:\n",
    "            print(\"所选颜色不足以完成{}色问题\".format(color_num))\n",
    "\n",
    "    # 比较所有点\n",
    "    def check_assignment_all(self, color_map):\n",
    "        for node in self.node_list:\n",
    "            for child_name in node.children:\n",
    "                if node.name in color_map and child_name in color_map:\n",
    "                    if color_map[node.name] == color_map[child_name]:\n",
    "                        return False\n",
    "        return True\n",
    "    # 只比较assignment的点就行\n",
    "    def check_assignment(self, color_map, node, color):\n",
    "        if len(node.children) > 0:\n",
    "            for child_name in node.children:\n",
    "                if child_name in color_map and color_map[child_name] == color:\n",
    "                    return False\n",
    "        return True\n",
    "\n",
    "    def recursive_backtracking_search(self, color_map, color_arr, uncolored_nodes):\n",
    "        if len(uncolored_nodes) > 0:\n",
    "            node = uncolored_nodes.pop()\n",
    "            for color in color_arr:\n",
    "                if self.check_assignment(color_map, node, color):\n",
    "                    color_map[node.name] = color\n",
    "                    result = self.recursive_backtracking_search(color_map, color_arr, uncolored_nodes)\n",
    "                    if result:\n",
    "                        return result\n",
    "                    del color_map[node.name]\n",
    "            uncolored_nodes.append(node)\n",
    "            return False\n",
    "        else:\n",
    "            return True\n",
    "\n",
    "problem = BacktrackingAustralia('Backtracking')\n",
    "problem.basic_backtracking_search(3)\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "id": "e72069ee-2a07-4ee8-aff9-a6a4ac1760cb",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "{'WA': [0], 'NT': [0, 1], 'SA': [0, 1], 'Q': [0, 1], 'NSW': [0, 1], 'V': [0, 1], 'T': [0, 1]}\n",
      "找到了相容解\n",
      "{'WA': [0], 'NT': [1], 'SA': [0], 'Q': [0], 'NSW': [1], 'V': [0], 'T': [1]}\n"
     ]
    },
    {
     "data": {
      "image/png": "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7hJgswtDhw51PUtsH479fuzevdt9befOnZo7d65lGeEZ4N13+8qVWh+DG288sVzps8/69jjY5uMQmh3SVwcQLOwxAJJg+fLlbj29bUg0FStWdElBYFlBvFV4yeNfhjBp0iTVrFnT6yEBEck2M9tyIlt6OO2337RgyhTrvhaeNw80OHvoIalBg38anFmhBHu8deuQvn1aSbs4GwmEHOVKgTAbMGCAW18cWCtMDX8pY8aM7mxop06d3FIqAP9tiqSwptA2O2DlSD/7TFqyxLIUyTZGW9dj64QcBr9Kipx+00BsKs3mYyB8bANh69atXVJg1Ub69esX90mBKVu2rLu20qwAzmx+uN/QSqneeadkS5isstKMGb7ZikmTYvd7BnDOmNUDzoKtF7YlMm5dsCv0kd2tq7dKRJArzWjlSletWuV6OcRSd2cgFHaEskTp2bDeKnZSo1MnqVQp6bj9EaFiS4kARDaO3sAZ2HRc3rx5E5OCyy67TOvXrycpOM4tt9ziro8cOaKff/7Z6+EAEW+/l0lBgP3eWoIShqTAnLoDBIBIQmIA/IeePXuqfPnyrna5efTRRzVlyhSltrrgSJQzZ063z8B8+eWXXg8HiHgHFH/i8XsGog2JAXAaN998szsTbmfBLRH48ccf9frrr3s9rIhlCZSZODGxbROA04jHUwvx+D0D0YbEADiJ1RgvWbJkYpOy3Llzu/KkVq8fp9eiRQt3vXr1arfPAMDppQvVC9et69u7YJd+/f55vH9/6eKLpbRppUqVrFLAic/r1u2f57VrF13fM4CgITEAjmONiPLly6clVs5P0hVXXKE1a9Yof/78Xg8t4nXs2NFdW1IwduxYr4cDRDTfwrsQadhQsq7K1q/AjBvn20fQvLmvA7LN7jVtKv3++z/PadvW95yKFUM2rPND9soAgoXEAPD74IMPVLVqVVePPyEhQc8//7xGjx7typLizLJly+a6P5tevXp5PRwgooW0P3qOHFL16lY+zXf/5Zelxo0lWwp5+eXSF19IF13kmyUIsCaF9pwQdmOOr57wQHQiMUDcszPcrVq10n333Sfr95c2bVqNGTNGzzzzjNdDizoVKlRw19YFGsDphe68/EmskZlVCrvuun8es3LCrVpJI0eGdX8BiQEQ+UgMENe2bNmiokWLavDgwe7+hRde6Grx16tXz+uhRfU+A1t+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",
      "text/plain": [
       "<Figure size 960x720 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "import random\n",
    "import numpy as np\n",
    "import pandas as pd\n",
    "\n",
    "import networkx as nx\n",
    "import matplotlib.pyplot as plt\n",
    "\n",
    "class Thing:\n",
    "    def __init__(self, name=''):\n",
    "        self.name = name\n",
    "    def __repr__(self):\n",
    "        return self.name\n",
    "\n",
    "class Problem(Thing):\n",
    "    def __init__(self, name):\n",
    "        super().__init__(name)\n",
    "\n",
    "class Node(Thing):\n",
    "    def __init__(self, name, children=None, loc=None, state=-1):\n",
    "        super().__init__(name)\n",
    "        self.children = children if children is not None else {}\n",
    "        self.loc = loc\n",
    "        self.state = state\n",
    "    def add_child(self, child_name, child_weight):\n",
    "        self.children[child_name] = child_weight\n",
    "\n",
    "class Graph(Thing):\n",
    "    def __init__(self, name):\n",
    "        super().__init__(name)\n",
    "        self.node_list = []\n",
    "        self.node_map = {}\n",
    "\n",
    "    def add_node(self, node):\n",
    "        self.node_list.append(node)  # 如果我们希望node实际有一个位置属性，这里可变\n",
    "        self.node_map[node.name] = node\n",
    "\n",
    "    def draw(self, font_size=10, k_layout=0.1):\n",
    "        plt.rcdefaults()\n",
    "        plt.rcParams['figure.dpi'] = 150\n",
    "        g = nx.DiGraph()\n",
    "        # g = nx.Graph()\n",
    "        edges = []\n",
    "        edges_map = {}\n",
    "        for node in self.node_list:\n",
    "            for key, val in node.children.items():\n",
    "                edges.append((node.name, key, 1 / val))\n",
    "                edges_map[(node.name, key)] = val\n",
    "        # print(edges)\n",
    "        g.add_weighted_edges_from(edges)\n",
    "        # 有孤立点，因此需要额外处理一下边中没有涉及的点\n",
    "        g.add_nodes_from(self.node_map)\n",
    "        # {'': (x, y)}\n",
    "        pos_map = {}\n",
    "        nodes_label = {}\n",
    "        for node in self.node_list:\n",
    "            if node.loc is not None:\n",
    "                pos_map[node.name] = node.loc\n",
    "            nodes_label[node.name] = node.name + \"\\n\" + str(node.state)\n",
    "        # print(pos_map)\n",
    "        rand_seed = random.randint(1, 1000)\n",
    "        if len(pos_map) > 0:\n",
    "            locs = nx.spring_layout(g, pos=pos_map, fixed=pos_map.keys(), seed=rand_seed, k=k_layout)\n",
    "        else:\n",
    "            locs = nx.spring_layout(g, seed=rand_seed, k=k_layout)\n",
    "        # print(locs)\n",
    "        color_arr = []\n",
    "        for node_g in g.nodes:\n",
    "            color_arr.append(self.node_map[node_g].state)\n",
    "        # print(color_arr)\n",
    "        nx.draw_networkx_nodes(g, pos=locs,\n",
    "                              node_size=800,\n",
    "                              node_color=color_arr,\n",
    "                              cmap=plt.cm.cool)\n",
    "        nx.draw_networkx_labels(g, pos=locs,\n",
    "                                labels=nodes_label,\n",
    "                                font_size=font_size,\n",
    "                                font_color='black')\n",
    "        # print(nodes_label)\n",
    "        nx.draw_networkx_edges(g, pos=locs, )\n",
    "        # print(locs)\n",
    "        # nx.draw_networkx_edge_labels(g, pos=locs,\n",
    "        #                              edge_labels=edges_map,\n",
    "        #                              font_size=font_size - 1)\n",
    "        # print(edges_map)\n",
    "\n",
    "\n",
    "# AC-3\n",
    "class AC3Australia(AustraliaProblemGraph):\n",
    "    def __init__(self, name):\n",
    "        super().__init__(name)\n",
    "    \n",
    "    # 使用AC3对初始情况进行检查，减少冲突，再回溯求解\n",
    "    def ac3_backtracking_search(self, color_num=4):\n",
    "        # 一开始每个节点都有N种可能的颜色\n",
    "        color_arr = [c for c in range(color_num)]\n",
    "        color_map = {}\n",
    "        for node in self.node_list:\n",
    "            color_map[node.name] = color_arr.copy()\n",
    "        # 构造起始情况，令节点1只有一个值\n",
    "        color_map[self.node_list[0].name] = color_map[self.node_list[0].name][:1]\n",
    "        print(color_map)  \n",
    "        # 遍历所有边，检查各个相关边的相容性\n",
    "        queue = self.node_list.copy()\n",
    "        result, color_map = self.ac3(queue, color_map)\n",
    "        if result:\n",
    "            print(\"找到了相容解\")\n",
    "            print(color_map)\n",
    "            # 将节点的state赋值为color\n",
    "            for node_name, node_color in color_map.items():\n",
    "                self.node_map[node_name].state = node_color\n",
    "            self.draw(font_size=7, k_layout=0.3)\n",
    "        else:\n",
    "            print(\"无法找到相容解\")\n",
    "\n",
    "    def ac3(self, queue, color_map):\n",
    "        while len(queue) > 0:\n",
    "            node = queue.pop()\n",
    "            # 检查node连接的所有节点，如果该节点的颜色和node的冲突，则删除，如果发生修改，则把新节点送入queue\n",
    "            if len(color_map[node.name]) == 1 and len(node.children) > 0:\n",
    "                for child in node.children:\n",
    "                    if color_map[node.name][0] in color_map[child]:\n",
    "                        if len(color_map[child]) == 1:\n",
    "                            # 如果修改后，child没有可用颜色了\n",
    "                            return False, color_map\n",
    "                        else:\n",
    "                            color_map[child].remove(color_map[node.name][0])\n",
    "                            # 发生了修改，把child再送入queue\n",
    "                            queue.append(self.node_map[child])\n",
    "            # 检查此时是否得到解\n",
    "            if sum([len(color_map[cs]) for cs in color_map]) != len(color_map):\n",
    "                # 如果还有某个节点有多种取值，将其值选一个，并送入递归\n",
    "                for cs in color_map:\n",
    "                    if len(color_map[cs]) > 1:\n",
    "                        for c in color_map[cs]:\n",
    "                            color_map_c = color_map.copy()\n",
    "                            color_map_c[cs] = [c]\n",
    "                            queue.append(self.node_map[cs])\n",
    "                        result, color_map = self.ac3(queue, color_map_c)\n",
    "                        if result:  # 找到了可行解，否则尝试下一个颜色\n",
    "                            return result, color_map\n",
    "            else:\n",
    "                return True, color_map\n",
    "\n",
    "problem = AC3Australia('Backtracking')\n",
    "problem.ac3_backtracking_search(2)"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.9.21"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
